import {
  Column,
  DataType,
  IsUUID,
  Model,
  PrimaryKey,
  Table,
} from 'sequelize-typescript';

import { AccessType, FileCollectionAttributes, FileType } from '@/utils/types/administrative';

@Table({ tableName: 'file_collection' })
export class FileCollectionModel
  extends Model<FileCollectionAttributes, FileCollectionAttributes>
  implements FileCollectionAttributes
{
  @PrimaryKey
  @Column({
    type: DataType.UUID,
    allowNull: false,
    defaultValue: DataType.UUIDV4,
    comment: '收集任务id',
  })
  task_id: string;

  // 标题
  @Column({
    type: DataType.STRING(100),
    allowNull: false,
    comment: '标题',
  })
  title: string;

  // 内容
  @Column({
    type: DataType.TEXT,
    allowNull: false,
    comment: '内容要求',
  })
  content: string;

  // 文件类型
  @Column({
    type: DataType.JSON,
    values: ['all', 'word', 'excel', 'pdf', 'ppt', 'zip', 'image'],
    allowNull: false,
    defaultValue: JSON.stringify(['all']),
    comment: '文件类型',
  })
  file_type: string;

  // 访问权限
  @Column({
    type: DataType.ENUM,
    values: ['public', 'private', 'some'],
    allowNull: false,
    comment: '任务提交的访问权限',
  })
  access: AccessType;

  // 访问密码
  @Column({
    type: DataType.STRING(100),
    allowNull: true,
    comment: '任务提交的访问密码',
  })
  access_pwd: string;

  // 指定人员
  @Column({
    type: DataType.ARRAY(DataType.UUID),
    allowNull: true,
    comment: '指定人员',
  })
  submitter: string[];

  // 审核人id
  @IsUUID(4)
  @Column({
    type: DataType.UUID,
    allowNull: false,
    comment: '审核人id',
  })
  reviewer_id: string;

  // 审核时间
  @Column({
    type: DataType.DATE,
    allowNull: true,
    comment: '审核时间',
  })
  review_time: Date;

  // 截止时间
  @Column({
    type: DataType.DATE,
    allowNull: true,
    comment: '截止时间',
  })
  end_time: Date;

  // 创建时间
  @Column({
    type: DataType.DATE,
    allowNull: false,
    defaultValue: DataType.NOW,
    comment: '创建时间',
  })
  created_time: Date;

  // 创建人
  @Column({
    type: DataType.UUID,
    allowNull: false,
    comment: '创建人',
  })
  founder_id: string;

  // status状态
  @Column({
    type: DataType.INTEGER,
    allowNull: false,
    defaultValue: 1,
    comment: '状态',
  })
  status: number;

  // 是否置顶
  @Column({
    type: DataType.BOOLEAN,
    allowNull: false,
    defaultValue: 0,
    comment: '是否置顶（0:否，1：是）',
  })
  pinned: number;

  // 一个任务关联一个创建人，一对一关联
  // @HasOne(() => XmwUser, { as: 'f' })
  // founder: XmwUser;
  // 一个任务关联一个审核人，一对一关联
  // @HasOne(() => XmwUser, { as: 'r' })
  // reviewer: XmwUser;
  // 一个任务关联多个提交人，一对多关联
  // @BelongsTo(() => XmwUser, { as: 's' })
  // submitters: XmwUser[];
}
